<?php
require_once __DIR__ . '/../ZendPartial.php';
require_once 'Request/DateTime.php';
require_once 'DateMath.php';
require_once APPLICATION_PATH . '/models/Calendar/xml/CalendarXmlCOntroller.php';
/**
 * 予定イベント開始時刻終了時刻設定コンポーネントクラス
 * <a href="https://www.evernote.com/shard/s89/sh/776c08c0-96a0-4433-9efb-9e590af5f239/9877cf7adcc114a8569642daa128844e">開発メモ</a>
 */
class Components_StartTimeEndTimeController extends Components_ZendPartial
{
	/** テンプレートファイル名 */
	const TEMPLATE_FILE_HOUR = 'StartTimeEndTimeHour.tpl';
	const TEMPLATE_FILE_MINUTE = 'StartTimeEndTimeMinute.tpl';
	/** HTTPリクエストキー：予定開始時刻（時）*/
//	const HTTP_REQUEST_START_TIME_HOUR = 'START_TIME_HOUR';
	/** ＨＴＴＰリクエストキー：予定開始時刻（分）*/
//	const HTTP_REQUEST_START_TIME_MINUTE = 'START_TIME_MINUTE';
	/** HTTPリクエストキー：予定終了時刻（時）*/
//	const HTTP_REQUEST_END_TIME_HOUR = 'END_TIME_HOUR';
	/** ＨＴＴＰリクエストキー：予定終了時刻（分）*/
//	const HTTP_REQUEST_END_TIME_MINUTE = 'END_TIME_MINUTE';
	/** @var Models_Calendar_Controller カレンダーデータセットオブジェクト */
	protected $_objCalendar;

	/**
	 * コンストラクタ
	 * @param  Models_Calendar_Controller $CalendarDataset
	 * カレンダーデータセット場未設定の場合、ＨＴＴＰリクエスト（年月）に従って
	 * カレンダーデータセットを読み込む
	 * ＨＴＴＰリクエスト（年月）が未設定の場合、当月のカレンダーデータセットを読み込む
	 * カレンダーデータセットファイルが存在しない場合、開始時刻終了時刻のデフォルト値はＮＵＬＬを設置
	 */
	public function __construct($objCalendar=FALSE)
	{
		parent::__construct(__DIR__);
		/***
		 * カレンダデータセットオブジェクト
		 */
		$this->_objCalendar = $objCalendar;
		/** カレンダーデータセットオブジェクト設置判定 */
		if ($this->_objCalendar === FALSE) {
			$this->_objCalendar = $this->_createCalendarDatasetObject();
		}
		/***
		 * 初期選択状態設定
		 */
		$this->_setInitialSelected();
	}

	/**
	 * 開始時刻（時）フェッチ
	 * @return unknown
	 */
	public function fetchStartHour()
	{
		$this->view->NAME = Names::STARTTIMEHOUR;
		$this->view->SELECTED_VALUE = $this->view->SelectedStartHour;
		$sHtml = parent::fetch(self::TEMPLATE_FILE_HOUR);
		return $sHtml;
	}

	/**
	 * 開始時刻（分）フェッチ
	 * @return unknown
	 */
	public function fetchStartMinute()
	{
		$this->view->NAME = Names::STARTTIMEMINUTE;
		$this->view->SELECTED_VALUE = $this->view->SelectedStartMinute;
		$sHtml = parent::fetch(self::TEMPLATE_FILE_MINUTE);
		return $sHtml;
	}

	/**
	 * 終了時刻（時）フェッチ
	 * @return unknown
	 */
	public function fetchEndHour()
	{
		$this->view->NAME = Names::ENDTIMEHOUR;
		$this->view->SELECTED_VALUE = $this->view->SelectedEndHour;
		$sHtml = parent::fetch(self::TEMPLATE_FILE_HOUR);
		return $sHtml;
	}

	/**
	 * 開始時刻（分）フェッチ
	 * @return unknown
	 */
	public function fetchEndMinute()
	{
		$this->view->NAME = Names::ENDTIMEMINUTE;
		$this->view->SELECTED_VALUE = $this->view->SelectedEndMinute;
		$sHtml = parent::fetch(self::TEMPLATE_FILE_MINUTE);
		return $sHtml;
	}

	/**
	 * 開始時間終了時間をカレンダー保存用データ形式HH:MMに変換
	 * HTTPリクエストに設置する
	 */
	public static function convCalenderStartEndTime()
	{
		$StartHour = $this->_objHttpRequest->get(Names::STARTTIMEHOUR);
		$StartMinute = $this->_objHttpRequest->get(Names::STARTTIMEMINUTE);
		$EndHour = $this->_objHttpRequest->get(Names::ENDTIMEHOUR);
		$EndMinute = $this->_objHttpRequest->get(Names::ENDTIMEMINUTE);
		$_REQUEST[Names::STARTTIME]
		= $StartHour . ':' . $StartMinute;
		$_REQUEST[Names::ENDTIME]
		= $EndHour . ':' . $EndMinute;
	}

	/**
	 * 初期選択状態設定
	 * HTTPリクエスト（集合解散時刻）が設定されている場合
	 * これを、初期選択状態に設定する。
	 * これがなく、
	 * HTTPリクエスト（イベントＩＤ）が設定されている場合
	 * カレンダーデータセットから該当イベントデータセットを取得
	 * 当該イベントデータセットに保存されている開始時刻・終了時刻を７
	 * 初期選択状態に設定する。
	 */
	protected function _setInitialSelected()
	{
		if ($this->_setInitialSelectedFromHttpRequestTime()){
			return;
		}
		$EventDataset = FALSE;
		$EventId = $this->_objHttpRequest->get(Names::YOTEIID);
		$this->view->SelectedStartHour = '';
		$this->view->SelectedStartMinute = '';
		$this->view->SelectedEndHour = '';
		$this->view->SelectedEndMinute = '';
		/*** HTTPリクエスト（イベントＩＤ）設定判定	*/
		if ( $EventId != ''){
			$EventDataset = $this->_objCalendar->searchId($EventId);
		} else {
			return;
		}
		/*** イベントデータセット存在判定 */
		if ($EventDataset !== FALSE){
			$aryEventStartTime
			= Lib_Request_DateTime::explodeColonHourMinute(
					$EventDataset[Models_Calendar_Controller::KEY_START_TIME]
					);
			$aryEventEndTime
			= Lib_Request_DateTime::explodeColonHourMinute(
					$EventDataset[Models_Calendar_Controller::KEY_END_TIME]
					);
			$this->view->SelectedStartHour = $aryEventStartTime[Lib_Request_DateTime::KEY_HOUR];
			$this->view->SelectedStartMinute = $aryEventStartTime[Lib_Request_DateTime::KEY_MINUTE];
			$this->view->SelectedEndHour = $aryEventEndTime[Lib_Request_DateTime::KEY_HOUR];
			$this->view->SelectedEndMinute = $aryEventEndTime[Lib_Request_DateTime::KEY_MINUTE];
		}
	}

	/**
	 * HTTPリクエスト（集合解散時刻）から初期選択状態を設定する。
	 * ＨＴＴＰリクエストが不足している場合、設定を見送りＦＡＬＳＥを返す
	 */
	protected function _setInitialSelectedFromHttpRequestTime()
	{
		$startTimeHour = $this->_objHttpRequest->get(Names::STARTTIMEHOUR);
		if ($startTimeHour == '') {
			return FALSE;
		}
		$startTimeMinute = $this->_objHttpRequest->get(Names::STARTTIMEMINUTE);
		if ($startTimeMinute == '') {
			return FALSE;
		}
		$endTimeHour = $this->_objHttpRequest->get(Names::ENDTIMEHOUR);
		if ($endTimeHour == '') {
			return FALSE;
		}
		$endTimeMinute = $this->_objHttpRequest->get(Names::ENDTIMEMINUTE);
		if ($endTimeMinute == '') {
			return FALSE;
		}
		$this->view->SelectedStartHour = $startTimeHour;
		$this->view->SelectedStartMinute = $startTimeMinute;
		$this->view->SelectedEndHour = $endTimeHour;
		$this->view->SelectedEndMinute = $endTimeMinute;
		return TRUE;

	}
}